package com.xmhmyh.generalframework.project.sys.service;

import com.xmhmyh.generalframework.common.BaseIService;
import com.xmhmyh.generalframework.common.enums.YesOrNo;
import com.xmhmyh.generalframework.common.vo.SelectVO;
import com.xmhmyh.generalframework.project.sys.dto.MenuDTO;
import com.xmhmyh.generalframework.project.sys.dto.UserDTO;
import com.xmhmyh.generalframework.project.sys.entity.Menu;
import com.xmhmyh.generalframework.project.sys.entity.User;
import com.xmhmyh.generalframework.project.sys.enums.MenuType;
import com.xmhmyh.generalframework.project.sys.vo.MenuBtnVO;
import com.xmhmyh.generalframework.project.sys.vo.MenuVO;
import com.xmhmyh.generalframework.project.sys.vo.RouterVo;
import com.xmhmyh.generalframework.project.sys.vo.UserVO;

import java.util.List;

/**
 * @Author: 于丁
 * @DateTime: 2020/7/24 9:09 上午
 */
public interface IUserService extends BaseIService<User> {


    /**
     * @Author: 于丁
     * @Description: 保存用户数据
     * @DateTime: 2020/7/30 5:52 下午
     * @Params:
     * @Return
     */
    void saveHandler(User user, UserDTO userDTO);


    User creatUser(String userName,String name, Long accountId, String roleCode, YesOrNo yesOrNo, YesOrNo isShow);

    /**
    * @Author: 于丁
    * @Description: 更改用户角色
    * @DateTime: 2020/10/10 11:00 上午
    * @Params: * @param: null
    * @Return {@link null}
    */
    void changeUserRole(Long userId, List<String> roleCodeList);

    /**
     * @Author: 于丁
     * @Description: 检查用户名是否重复
     * @DateTime: 2020/8/18 10:54 上午
     * @Params: * @param: userName用户名  userId用户ID（如果传则会忽略）
     * @Return {@link true 重复 false 不重复}
     */
    Boolean checkUserNameRepeat(String userName, Long userId);

    /**
     * @Author: 于丁
     * @Description: 获取用户数据
     * @DateTime: 2020/7/30 5:52 下午
     * @Params:
     * @Return
     */
    UserVO loadMoreHandler(Long id);

    /**
     * @Author: 于丁
     * @Description: 激活用户
     * @DateTime: 2020/7/30 5:52 下午
     * @Params:
     * @Return
     */
    void activeHandler(Long id);

    /**
     * @Author: 于丁
     * @Description: 冻结用户
     * @DateTime: 2020/7/30 5:53 下午
     * @Params:
     * @Return
     */
    void freezeHandler(Long id);

    /**
     * @Author: 于丁
     * @Description: 重置密码
     * @DateTime: 2020/7/30 6:04 下午
     * @Params:
     * @Return
     */
    void resetPwdHandler(Long id);


    /**
     * @Author: 于丁
     * @Description: 删除用户
     * @DateTime: 2020/7/30 6:04 下午
     * @Params:
     * @Return
     */
    void delHandler(Long id);



    /**
     * @Author: 于丁
     * @Description: 删除账户的所有用户
     * @DateTime: 2020/8/26 7:04 下午
     * @Params: * @param: null
     * @Return {@link null}
     */
    void removeByAccountId(Long accountId);

    /**
    * @Author: 于丁
    * @Description:
    * @DateTime: 重置密码 10:58 上午
    * @Params: * @param: null
    * @Return {@link null}
    */
    void resetPassword(Long userId);

    /**
     * @Author: 于丁
     * @Description: 修改密码
     * @DateTime: 2020/9/3 2:25 下午
     * @Params: * @param: null
     * @Return {@link null}
     */
    void modifyPwdHandler(Long userId, String oldPwd, String newPwd);

    List<SelectVO> getUserSelectData(User user);

    User findByPhone(String phone);
}
